package com.cw1.principle.openClose.improve;

/**
 * 开闭合原则改进：利用抽象基类里面定义的抽象方法来实现画图方法
 */
public class Ocp {
    public static void main(String[] args) {
        // 存在问题:扩展性极差,例如加入一个画出三角形
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
        graphicEditor.drawShape(new Triangle());
        graphicEditor.drawShape(new Other());
    }
}

// 这是一个绘图的类
class GraphicEditor{
    // 接收Shape对象，然后根据type，来绘制不同的图形
    void drawShape(Shape shape){
        shape.draw();
    }
}

// Shape类,基类
abstract class Shape{
    int type;

    abstract void draw();
}

// 矩形类
class Rectangle extends Shape{
    Rectangle(){
        super.type = 1;
    }

    void draw() {
        System.out.println("画出矩形");
    }
}

// 圆形类
class Circle extends Shape{
    Circle(){
        super.type = 2;
    }

    void draw() {
        System.out.println("画出圆形");
    }
}

// 三角形类
class Triangle extends Shape{
    Triangle(){
        super.type = 3;
    }

    void draw() {
        System.out.println("画出三角形");
    }
}

// 其他图形
class Other extends Shape{
    Other(){
        super.type = 4;
    }

    void draw() {
        System.out.println("画出其他图形");
    }
}

